package com.bot.dev.module.job.task;

import com.bot.common.timer.CommonTimerTaskRunner;
import com.bot.nft.core.enums.op.AirdropEnum;
import com.bot.nft.module.dc.domain.DcOrderInfo;
import com.bot.nft.module.dc.domain.DcSellOrderInfo;
import com.bot.nft.module.dc.service.IDcOrderInfoService;
import com.bot.nft.module.dc.service.IDcSellOrderInfoService;
import com.bot.nft.module.op.domain.OpAirInfo;
import com.bot.nft.module.op.domain.OpRofoInfo;
import com.bot.nft.module.op.domain.vo.OpRofoInfoVo;
import com.bot.nft.module.op.service.IOpAirInfoService;
import com.bot.nft.module.op.service.IOpAirListService;
import com.bot.nft.module.op.service.IRofoOpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 定时器的一个示例
 *
 * @author botian
 * @date 2022/8/5 15:52
 **/
@Slf4j
@Component
public class ListTimerTaskRunner implements CommonTimerTaskRunner {

    @Resource
    IRofoOpService iRofoOpService;
    //空投活动接口
    @Resource
    IOpAirInfoService iOpAirInfoService;
    //空投活动白名单接口
    @Resource
    IOpAirListService iOpAirListService;
    private int n = 1;

    @Override
    public void action() {
        ListTimerTaskRunner.log.info("我是一个定时任务，正在在被执行第" + n + "次");
        n = n + 1;
        //这里写下你想要执行的业务逻辑代码
        List<OpRofoInfo> opRofoInfoVos = iRofoOpService.exeSnapshotTask();
        //执行优先购快照任务
        for (OpRofoInfo opRofoInfo : opRofoInfoVos) {
            Date snapshotTime = opRofoInfo.getSnapshotTime();
            //创建一个系统当先时间
            Date date = new Date();
            //计算时间差
            if (date.after(snapshotTime)) {
                iRofoOpService.exeRofoSnapshot(opRofoInfo.getId());
            }
        }

        //执行空投活动快照
        List<OpAirInfo> opAirInfos = iOpAirInfoService.airInfoList(AirdropEnum.ENABLE_STATUS.getValue(),
                AirdropEnum.HOLD_CONDITION.getValue());
        for (OpAirInfo opAirInfo : opAirInfos) {
            Date snaTime = opAirInfo.getSnaTime();
            //到快照时间执行快照
            if (snaTime.after(new Date())) {
                iOpAirListService.gneAirList(opAirInfo.getId());
            }
        }
    }
}
